package com.zxl.designpattern.behavioral.templatemethod;

/**
 * 抽象角色创建器，定义角色创建的模板方法
 */
public abstract class CharacterCreator {
    /**
     * 模板方法，定义创建角色的完整流程
     */
    public final void createCharacter() {
        selectRace();
        assignStats();
        equipStartingGear();
        
        // 钩子方法，允许子类决定是否执行特殊步骤
        if (includeSpecialItem()) {
            giveSpecialItem();
        }
        
        System.out.println("角色创建完成!");
    }
    
    /**
     * 选择角色种族的抽象方法
     */
    public abstract void selectRace();
    
    /**
     * 分配角色属性点的抽象方法
     */
    public abstract void assignStats();
    
    /**
     * 装备初始装备的抽象方法
     */
    public abstract void equipStartingGear();
    
    /**
     * 给予特殊物品的抽象方法，子类必须实现
     */
    public abstract void giveSpecialItem();
    
    /**
     * 钩子方法，决定是否给予特殊物品
     * 子类可以覆盖此方法来改变默认行为
     * @return 是否包含特殊物品，默认为true
     */
    public boolean includeSpecialItem() {
        return true;
    }
}    